package com.varlor.demo02;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class CarSystemProxy{
    Car car;

    public Object getProxy(){

        if(car == null){
            car = new Car();
        }
        //ClassLoader loader：指定当前目标对象使用类加载器，写法固定
        //Class<?>[] interfaces：目标对象实现的接口的类型，写法固定
        //InvocationHandler h：事件处理接口，需传入一个实现类，一般直接使用匿名内部类
        return Proxy.newProxyInstance(getClass().getClassLoader(), car.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("记录日志."+method.getName());
                        Object invoke = method.invoke(car, args);
                        return invoke;
                    }
                });
    }
}
